[レポート]モノリスからマイクロサービスへ 〜そしてそこに至るまでの道のり〜 #reinvent #CON360
本記事はre:Invent 2018のセッション「CON360 - From Monolith to Microservices (And All the Bumps along the Way)」のレポートです。
概要
Applications built on a microservices-based architecture and packaged as containers bring several benefits to your organization. In this session, Duolingo, a popular language-learning platform and an Amazon ECS customer, describes its journey from a monolith to a microservices architecture. We highlight the hurdles you may encounter, discuss how to plan your migration to microservices, and explain how you can use Amazon ECS to manage this journey.
スピーカー
- Brent Langston - Sr Developer Advocate, AWS
- Max Blaze - Staff Operations Engineer, Duolingo
レポート
前半 - モノリスからマイクロサービスへ移行するときのハードル
前半はBrent Langston氏がモノリシックなアーキテクチャ(モノリス)からマイクロサービスへと変わっていく、その過程で遭遇した出来事を紹介。
モノリスからマイクロサービスへ移り変わるときは技術だけでなく、人やワークフローも変わる必要がある。
People -> Workflow -> Technical -> People -> ...
人 - 準備のためのハードルは何か
新しいやり方とは対照的な古いやり方
- ローカルでどうやって開発する?
- デプロイがつらいけど、どうなる?
このハードルに対してAWSがどう助けるのか
- AWS Cloud9
- AWS CodeBuild
- AWS CodePipeline
- AWS ECS
- AWS EKS
- AWS Fargate
ワークフロー - Dockerはどう移行を助けるのか
- パッケージング
- ディストリビューション
- スケールアップ、スケールダウン
- 実験を簡単にする
このハードルに対してAWSがどう助けるのか
- Amazon ECR
- Amazon ECS
- Amazon EKS
- AWS Fargate
- AWS CloudFormation
- Application Load Balancer
- Amazon CloudWatch
- AWS CodePipeline
- AWS CodeBuild
技術 - オーケストレーションがどんな問題を解決するのか?
- プロセスモニタリング
- トラフィック
- サービスディスカバリ
- スケールアップ・ダウン
- デプロイ
- イミュータブルインフラ
- コスト削減
このハードルに対してAWSがどう助けるのか
- Amazon EKS
- AWS Fargate
- AWS CloudFormation
- AWS Auto Scaling
- Application Load Balancer
- Amazon CloudWatch
- Amazon Route 53
後半 - Duolingoのモノリスからマイクロサービスへの移行事例
後半はMax Blaze氏から無料語学学習アプリDuolingoのモノリスからマイクロサービスへの移行事例の紹介。
Duolingoのサービスは2013年のローンチから2018年まで、この図のようにサービスの構成が変化してきた。
なぜマイクロサービスに移ったのか?
- スケーラビリティ
- ベロシティ
- 柔軟性
- 信頼性
- コスト削減
どうはじめにマイクロサービス化する対象を決めたのか?
- 小さいけど、インパクトの大きい機能
- サイズ、複雑さ、リスクが増す
- 依存関係を考慮
モノリスとマイクロサービスの可用性
- モノリス: 0.99
- 連結されたマイクロサービス: 0.99 * 0.99 * 0.99 = 0.97
- 独立したマイクロサービス: 1 - (1 - 0.99)の3乗 = 0.999999
なぜDockerを使うのか?
- ビルドプロセスの標準化と依存関係のカプセル化
- ローカル開発環境と同様のプロダクション環境
- 素早いデプロイとロールバック
- 柔軟なリソース割当
なぜAmazon ECSでDockerを使うのか?
- タスクのオートスケーリング
- Amazon CloudWatch Metrics
- タスクレベルのIAM
- 動的なALBターゲット変更
- 管理しやすさ
アーキテクチャとCI/CD
マイクロサービス化したことによる結果
- スケーラビリティ: 100以上のマイクロサービス
- ベロシティ: 各サービスチームがモジュールをデプロイ
- 柔軟性: 公式に3つのプログラミング言語をサポート
- 信頼性: 99.99%の可用性を前クォーターに記録
- コスト: 計算資源のコストを60%削減
さいごに
モノリスからマイクロサービスへと移り変わるときは技術面だけではなく、ワークフローやチームの面でも変化が必要になります。
その変化の際には、様々なハードルがありますが、人とワークフロー、技術の面の多くをAWSのサービスがサポートしてくれます。
オンプレミス環境で苦労していたあの日々は何だったのだろう...。
開発者にとって良い時代が訪れましたね。